#pragma once
#include <iostream>
#include <curses.h>
#include <queue>
#include <unordered_set>

namespace client{

class Window
{
public:
  //构造函数中初始化屏幕
  Window();
  //析构函数销毁
  ~Window();
  //绘制标题窗口
  void DrawHeader();
  //绘制发送消息框窗口
  void DrawSendMsgBlank();
  //绘制接收消息框窗口
  void DrawRecvMsgBlank();
  //绘制成员列表窗口
  void DrawMemberList();
  //从窗口读字符串
  void GetStrFromWin(WINDOW* win,std::string* msg);
  //向窗口写字符串
  void PutStrToWin(WINDOW* win,int y,int x,const std::string str);
  //向消息队列中添加好友消息
  void AddMsg(const std::string& msg);
  //向在线好友列表中添加成员
  void AddMember(const std::string& meminfo);
  //从成员列表中删除下线成员
  void DelMember(const std::string& meminfo);

  WINDOW* header_win;//创建标题窗口返回的指针
  WINDOW* sendmsg_win;//创建输入消息框窗口返回的指针
  WINDOW* recvmsg_win;//创建接收好友消息窗口返回的指针
  WINDOW* memberlist_win;//创建成员列表窗口返回的指针
private:
  //当前要显示的好友消息
  //使用双端队列是因为队列不能进行遍历
  std::deque<std::string> member_msgs;
  //保存在线好友列表
  //使用哈希表便于插入和删除
  std::unordered_set<std::string> member_list;
};
}
